#ifndef __APP_MQTT_H__
#define __APP_MQTT_H__

#include <stdint.h>

#ifdef __cplusplus
extern "C" {
#endif

#define APP_MQTT_CFG_DEFAULT {                      \
    .url = "mqtt://bemfa.com:9501",                 \
    .client_id = "",                                \
}

#define APP_MQTT_TOPIC_DEFAULT {    \
    .set_topic = "socket001",       \
    .report_topic = "socket001/set", \
}

/**
 * @brief MQTT配置结构体
 * 包含MQTT连接的URL、客户端ID、用户名和密码
 */
typedef struct
{
    char url[128];      // MQTT服务器URL
    char client_id[64]; // 客户端ID
    char username[32];  // 用户名
    char password[32];  // 密码
} app_mqtt_cfg_t;

/**
 * @brief MQTT主题结构体
 * 包含设置、报告和OTA升级的主题
 */
typedef struct
{
    char set_topic[128];    // 云端下发设置主题
    char report_topic[128]; // 设备上报主题
    char ota_topic[128];    // OTA升级主题
} app_mqtt_topic_t;

/**
 * @brief MQTT信息结构体
 * 包含MQTT配置和主题信息
 */
typedef struct
{
    uint8_t connected : 1;  // 是否连接
    uint8_t reserved : 7;   // 保留位
    app_mqtt_cfg_t cfg;     // MQTT配置
    app_mqtt_topic_t topic; // MQTT主题
} app_mqtt_info_t;

/**
 * @brief 初始化MQTT
 * 初始化MQTT客户端，连接到MQTT服务器
 * @return 初始化结果
 */
int app_mqtt_init(void);

/**
 * @brief 反初始化MQTT
 * 反初始化MQTT客户端，断开与MQTT服务器的连接
 * @return 反初始化结果
 */
int app_mqtt_deinit(void);

/**
 * @brief MQTT report主题数据上报
 * @return 数据上报结果
 */
int app_mqtt_data_report(const char *data, int len);

/**
 * @brief 获取MQTT信息
 * @return 指向MQTT信息结构体的指针
 */
app_mqtt_info_t *app_mqtt_get_info(void);

#ifdef __cplusplus
}
#endif

#endif // __APP_MQTT_H__
